package com.example.demo.service;

import com.example.demo.domain.*;
import com.example.demo.domain.DTO.*;
import org.apache.ibatis.annotations.Param;

import java.util.HashMap;
import java.util.List;

/**
 * @author z'z'w
 * @description 针对表【SPOT_INFO】的数据库操作Service
 * @createDate 2023-05-12 08:52:47
 */
public interface SpotInfoService {
    /**
     * 返回所有
     *
     * @return
     */
    List<SpotInfo> selectAll();

    /**
     * 热度前五
     *
     * @return
     */
    List<SpotHotInfo> selectHotInfoTop10();


    /**
     * 星评前五
     *
     * @return
     */
    List<SpotGradeInfo> selectGradeTop10();

    /**
     * 推荐值数前10的景区
     */
    List<SpotInfo> selectRatingTop10();

    /**
     * 返回最多评论的一个景点
     */
    SpotInfo selectMaxSum();

    /**
     * 按照景点Id查找景点
     *
     * @param spotId
     * @return
     */
    SpotInfo selectSpotInfoById(int spotId);

    /**
     * 季节最热门景区(x轴 季节 y轴 景区  z轴 该季度总评论数)
     *
     * @return
     */
    HashMap<String, HashMap<String, Object>> selectSeasonSpotInfo();

    /**
     * 返回景区搜索栏信息
     *
     * @return
     */
    List<SpotSearch> selectSpotOtherInfo();

    /**
     * 各景点评论数
     *
     * @return
     */
    List<SpotComCntInfo> selectSpotComCntInfo();

    /**
     * 返回各景点的五个指标
     *
     * @return 景点五个指标
     */
    SpotFiveInfo selectSpotFiveInfo(int spotId);


    /**
     * 返回集体景点的平均五个指标
     *
     * @return 集体景点五个指标
     */
    SpotAvgFiveInfo selectAllSpotAvgFiveInfo();

    /**
     * 返回每个月每个景区的评论数，平均值
     *
     * @return 返回每个月每个景区的评论数，平均值
     */
    HashMap<String, List<SpotMonthInfo>> selectSpotMonthInfo();

    /**
     * 某个景区来自各个省的游客数
     */
    SpotProvinceDto selectSpotProvincePeopleNum(int spotId);

    /**
     * rating前十景区的各月评论数
     *
     * @return
     */
    HashMap<String, HashMap<String, Object>> selectRatingTop10CntInfo();

    /**
     * rating前十的景区的 各省份来访人数
     */
    HashMap<String, HashMap<String, Object>> selectRatingTop10ProvinceInfo();


    /**
     * 季节最热门景区评论数前十
     *
     * @return
     */
    HashMap<String, List<SeasonSpot10Info>> selectSeasonSpot10Info();

    /**
     * 景区等级数量
     */
    List<SpotLevelCnt> selectSpotLevelCnt();
}
